home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 October: Mac OS SDK / Dev.CD Oct 97 SDK1.toast / Development Kits (Disc 1) / Interfaces&Libraries / Universal / Interfaces / PInterfaces / QD3DGroup.p < prev    next >
Encoding:
Text File  |  1997-08-12  |  14.5 KB  |  408 lines  |  [TEXT/MPS ]

  1. {
  2.      File:        QD3DGroup.p
  3.  
  4.      Contains:    Q3Group methods        
  5.  
  6.      Version:    Technology:    Quickdraw 3D 1.5.1
  7.                  Release:    Universal Interfaces 3.0.1
  8.  
  9.      Copyright:    © 1995-1997 by Apple Computer, Inc., all rights reserved.
  10.  
  11.      Bugs?:        Please include the the file and version information (from above) with
  12.                  the problem description.  Developers belonging to one of the Apple
  13.                  developer programs can submit bug reports to:
  14.  
  15.                      devsupport@apple.com
  16.  
  17. }
  18. {$IFC UNDEFINED UsingIncludes}
  19. {$SETC UsingIncludes := 0}
  20. {$ENDC}
  21.  
  22. {$IFC NOT UsingIncludes}
  23.  UNIT QD3DGroup;
  24.  INTERFACE
  25. {$ENDC}
  26.  
  27. {$IFC UNDEFINED __QD3DGROUP__}
  28. {$SETC __QD3DGROUP__ := 1}
  29.  
  30. {$I+}
  31. {$SETC QD3DGroupIncludes := UsingIncludes}
  32. {$SETC UsingIncludes := 1}
  33.  
  34. {$IFC UNDEFINED __QD3D__}
  35. {$I QD3D.p}
  36. {$ENDC}
  37.  
  38.  
  39. {$PUSH}
  40. {$ALIGN POWER}
  41. {$LibExport+}
  42.  
  43. {*****************************************************************************
  44.  **                                                                             **
  45.  **                            Group Typedefs                                     **
  46.  **                                                                             **
  47.  ****************************************************************************}
  48. {
  49.  * These flags affect how a group is traversed
  50.  * They apply to when a group is "drawn", "picked", "bounded", "written"
  51.  }
  52.  
  53. TYPE
  54.     TQ3DisplayGroupStateMasks     = LONGINT;
  55. CONST
  56.     kQ3DisplayGroupStateNone    = {TQ3DisplayGroupStateMasks}0;
  57.     kQ3DisplayGroupStateMaskIsDrawn = {TQ3DisplayGroupStateMasks}$01;
  58.     kQ3DisplayGroupStateMaskIsInline = {TQ3DisplayGroupStateMasks}$02;
  59.     kQ3DisplayGroupStateMaskUseBoundingBox = {TQ3DisplayGroupStateMasks}$04;
  60.     kQ3DisplayGroupStateMaskUseBoundingSphere = {TQ3DisplayGroupStateMasks}$08;
  61.     kQ3DisplayGroupStateMaskIsPicked = {TQ3DisplayGroupStateMasks}$10;
  62.     kQ3DisplayGroupStateMaskIsWritten = {TQ3DisplayGroupStateMasks}$20;
  63.  
  64.  
  65. TYPE
  66.     TQ3DisplayGroupState                = LONGINT;
  67. {*****************************************************************************
  68.  **                                                                             **
  69.  **                    Group Routines (apply to all groups)                     **
  70.  **                                                                             **
  71.  ****************************************************************************}
  72. FUNCTION Q3Group_New: TQ3GroupObject; C;
  73. FUNCTION Q3Group_GetType(group: TQ3GroupObject): LONGINT; C;
  74. FUNCTION Q3Group_AddObject(group: TQ3GroupObject; object: TQ3Object): TQ3GroupPosition; C;
  75. FUNCTION Q3Group_AddObjectBefore(group: TQ3GroupObject; position: TQ3GroupPosition; object: TQ3Object): TQ3GroupPosition; C;
  76. FUNCTION Q3Group_AddObjectAfter(group: TQ3GroupObject; position: TQ3GroupPosition; object: TQ3Object): TQ3GroupPosition; C;
  77. FUNCTION Q3Group_GetPositionObject(group: TQ3GroupObject; position: TQ3GroupPosition; VAR object: TQ3Object): TQ3Status; C;
  78. FUNCTION Q3Group_SetPositionObject(group: TQ3GroupObject; position: TQ3GroupPosition; object: TQ3Object): TQ3Status; C;
  79. FUNCTION Q3Group_RemovePosition(group: TQ3GroupObject; position: TQ3GroupPosition): TQ3Object; C;
  80. FUNCTION Q3Group_GetFirstPosition(group: TQ3GroupObject; VAR position: TQ3GroupPosition): TQ3Status; C;
  81. FUNCTION Q3Group_GetLastPosition(group: TQ3GroupObject; VAR position: TQ3GroupPosition): TQ3Status; C;
  82. FUNCTION Q3Group_GetNextPosition(group: TQ3GroupObject; VAR position: TQ3GroupPosition): TQ3Status; C;
  83. FUNCTION Q3Group_GetPreviousPosition(group: TQ3GroupObject; VAR position: TQ3GroupPosition): TQ3Status; C;
  84. FUNCTION Q3Group_CountObjects(group: TQ3GroupObject; VAR nObjects: LONGINT): TQ3Status; C;
  85. FUNCTION Q3Group_EmptyObjects(group: TQ3GroupObject): TQ3Status; C;
  86. {
  87.  *     Typed Access
  88.  }
  89. FUNCTION Q3Group_GetFirstPositionOfType(group: TQ3GroupObject; isType: TQ3ObjectType; VAR position: TQ3GroupPosition): TQ3Status; C;
  90. FUNCTION Q3Group_GetLastPositionOfType(group: TQ3GroupObject; isType: TQ3ObjectType; VAR position: TQ3GroupPosition): TQ3Status; C;
  91. FUNCTION Q3Group_GetNextPositionOfType(group: TQ3GroupObject; isType: TQ3ObjectType; VAR position: TQ3GroupPosition): TQ3Status; C;
  92. FUNCTION Q3Group_GetPreviousPositionOfType(group: TQ3GroupObject; isType: TQ3ObjectType; VAR position: TQ3GroupPosition): TQ3Status; C;
  93. FUNCTION Q3Group_CountObjectsOfType(group: TQ3GroupObject; isType: TQ3ObjectType; VAR nObjects: LONGINT): TQ3Status; C;
  94. FUNCTION Q3Group_EmptyObjectsOfType(group: TQ3GroupObject; isType: TQ3ObjectType): TQ3Status; C;
  95. {
  96.  *    Determine position of objects in a group
  97.  }
  98. FUNCTION Q3Group_GetFirstObjectPosition(group: TQ3GroupObject; object: TQ3Object; VAR position: TQ3GroupPosition): TQ3Status; C;
  99. FUNCTION Q3Group_GetLastObjectPosition(group: TQ3GroupObject; object: TQ3Object; VAR position: TQ3GroupPosition): TQ3Status; C;
  100. FUNCTION Q3Group_GetNextObjectPosition(group: TQ3GroupObject; object: TQ3Object; VAR position: TQ3GroupPosition): TQ3Status; C;
  101. FUNCTION Q3Group_GetPreviousObjectPosition(group: TQ3GroupObject; object: TQ3Object; VAR position: TQ3GroupPosition): TQ3Status; C;
  102.  
  103. {*****************************************************************************
  104.  **                                                                             **
  105.  **                            Group Subclasses                                 **
  106.  **                                                                             **
  107.  ****************************************************************************}
  108. FUNCTION Q3LightGroup_New: TQ3GroupObject; C;
  109. FUNCTION Q3InfoGroup_New: TQ3GroupObject; C;
  110. {*****************************************************************************
  111.  **                                                                             **
  112.  **                        Display Group Routines                                 **
  113.  **                                                                             **
  114.  ****************************************************************************}
  115. FUNCTION Q3DisplayGroup_New: TQ3GroupObject; C;
  116. FUNCTION Q3DisplayGroup_GetType(group: TQ3GroupObject): LONGINT; C;
  117. FUNCTION Q3DisplayGroup_GetState(group: TQ3GroupObject; VAR state: TQ3DisplayGroupState): TQ3Status; C;
  118. FUNCTION Q3DisplayGroup_SetState(group: TQ3GroupObject; state: TQ3DisplayGroupState): TQ3Status; C;
  119. FUNCTION Q3DisplayGroup_Submit(group: TQ3GroupObject; view: TQ3ViewObject): TQ3Status; C;
  120. {*****************************************************************************
  121.  **                                                                             **
  122.  **        Ordered Display Group                                                  **
  123.  **                                                                             **
  124.  **        Ordered display groups keep objects in order by the type of object:     **
  125.  **                                                                             **
  126.  **        1    kQ3ShapeTypeTransform                                             **
  127.  **        2    kQ3ShapeTypeStyle                                                  **
  128.  **        3    kQ3SetTypeAttribute                                                  **
  129.  **        4    kQ3ShapeTypeShader                                                  **
  130.  **        5    kQ3ShapeTypeCamera                                                  **
  131.  **        6    kQ3ShapeTypeLight                                                  **
  132.  **        7    kQ3ShapeTypeGeometry                                             **
  133.  **        8    kQ3ShapeTypeGroup                                                 **            
  134.  **        9    kQ3ShapeTypeUnknown                                                 **
  135.  **                                                                             **
  136.  **        Within a type, you are responsible for keeping things in order.         **
  137.  **                                                                             **
  138.  **        You may access and/or manipulate the group using the above types      **
  139.  **        (fast), or you may use any parent or leaf class types (slower).         **
  140.  **                                                                             **
  141.  **        Additional types will be added as functionality grows.                 **
  142.  **                                                                             **
  143.  **        The group calls which access by type are much faster for ordered     ** 
  144.  **        display group for the types above.                                     **
  145.  **                                                                             **
  146.  **        N.B. In QuickDraw 3D 1.0 Lights and Cameras are a no-op when drawn.     **
  147.  **                                                                             **
  148.  ****************************************************************************}
  149. FUNCTION Q3OrderedDisplayGroup_New: TQ3GroupObject; C;
  150. {*****************************************************************************
  151.  **                                                                             **
  152.  **        IO Proxy Display Group                                                  **
  153.  **                                                                             **
  154.  **        IO Proxy display groups are used to place more than one              **
  155.  **        representation of an object in a metafile. For example, if you know     **
  156.  **        another program does not understand NURBPatches but does understand  **
  157.  **        Meshes, you may place a mesh and a NURB Patch in an IO Proxy Group,  **
  158.  **        and the reading program will select the desired representation.         **
  159.  **                                                                             **
  160.  **        Objects in an IO Proxy Display Group are placed in their preferencial**
  161.  **        order, with the FIRST object being the MOST preferred, the LAST      **
  162.  **        object the least preferred.                                             **
  163.  **                                                                             **
  164.  **        The behavior of an IO Proxy Display Group is that when drawn/picked/ **
  165.  **        bounded, the first object in the group that is not "Unknown" is used,**
  166.  **        and the other objects ignored.                                         **
  167.  **                                                                             **
  168.  ****************************************************************************}
  169. FUNCTION Q3IOProxyDisplayGroup_New: TQ3GroupObject; C;
  170. {*****************************************************************************
  171.  **                                                                             **
  172.  **                        Group Extension Definitions                             **
  173.  **                                                                             **
  174.  ****************************************************************************}
  175. {
  176.  *    Searching methods - OPTIONAL
  177.  }
  178.  
  179. CONST
  180.     kQ3XMethodType_GroupAcceptObject = 'gaco';
  181.  
  182.  
  183. TYPE
  184.     TQ3XGroupAcceptObjectMethod = ProcPtr;  { FUNCTION TQ3XGroupAcceptObjectMethod(group: TQ3GroupObject; object: TQ3Object): TQ3Boolean; C; }
  185.  
  186.  
  187. CONST
  188.     kQ3XMethodType_GroupAddObject = 'gado';
  189.  
  190.  
  191. TYPE
  192.     TQ3XGroupAddObjectMethod = ProcPtr;  { FUNCTION TQ3XGroupAddObjectMethod(group: TQ3GroupObject; object: TQ3Object): TQ3GroupPosition; C; }
  193.  
  194.  
  195. CONST
  196.     kQ3XMethodType_GroupAddObjectBefore = 'gaob';
  197.  
  198.  
  199. TYPE
  200.     TQ3XGroupAddObjectBeforeMethod = ProcPtr;  { FUNCTION TQ3XGroupAddObjectBeforeMethod(group: TQ3GroupObject; position: TQ3GroupPosition; object: TQ3Object): TQ3GroupPosition; C; }
  201.  
  202.  
  203. CONST
  204.     kQ3XMethodType_GroupAddObjectAfter = 'gaoa';
  205.  
  206.  
  207. TYPE
  208.     TQ3XGroupAddObjectAfterMethod = ProcPtr;  { FUNCTION TQ3XGroupAddObjectAfterMethod(group: TQ3GroupObject; position: TQ3GroupPosition; object: TQ3Object): TQ3GroupPosition; C; }
  209.  
  210.  
  211. CONST
  212.     kQ3XMethodType_GroupSetPositionObject = 'gspo';
  213.  
  214.  
  215. TYPE
  216.     TQ3XGroupSetPositionObjectMethod = ProcPtr;  { FUNCTION TQ3XGroupSetPositionObjectMethod(group: TQ3GroupObject; gPos: TQ3GroupPosition; obj: TQ3Object): TQ3Status; C; }
  217.  
  218.  
  219. CONST
  220.     kQ3XMethodType_GroupRemovePosition = 'grmp';
  221.  
  222.  
  223. TYPE
  224.     TQ3XGroupRemovePositionMethod = ProcPtr;  { FUNCTION TQ3XGroupRemovePositionMethod(group: TQ3GroupObject; position: TQ3GroupPosition): TQ3Object; C; }
  225.  
  226. {
  227.  *    Searching methods - OPTIONAL - default uses above methods
  228.  }
  229.  
  230. CONST
  231.     kQ3XMethodType_GroupGetFirstPositionOfType = 'gfrt';
  232.  
  233.  
  234. TYPE
  235.     TQ3XGroupGetFirstPositionOfTypeMethod = ProcPtr;  { FUNCTION TQ3XGroupGetFirstPositionOfTypeMethod(group: TQ3GroupObject; isType: TQ3ObjectType; VAR gPos: TQ3GroupPosition): TQ3Status; C; }
  236.  
  237.  
  238. CONST
  239.     kQ3XMethodType_GroupGetLastPositionOfType = 'glst';
  240.  
  241.  
  242. TYPE
  243.     TQ3XGroupGetLastPositionOfTypeMethod = ProcPtr;  { FUNCTION TQ3XGroupGetLastPositionOfTypeMethod(group: TQ3GroupObject; isType: TQ3ObjectType; VAR gPos: TQ3GroupPosition): TQ3Status; C; }
  244.  
  245.  
  246. CONST
  247.     kQ3XMethodType_GroupGetNextPositionOfType = 'gnxt';
  248.  
  249.  
  250. TYPE
  251.     TQ3XGroupGetNextPositionOfTypeMethod = ProcPtr;  { FUNCTION TQ3XGroupGetNextPositionOfTypeMethod(group: TQ3GroupObject; isType: TQ3ObjectType; VAR gPos: TQ3GroupPosition): TQ3Status; C; }
  252.  
  253.  
  254. CONST
  255.     kQ3XMethodType_GroupGetPrevPositionOfType = 'gpvt';
  256.  
  257.  
  258. TYPE
  259.     TQ3XGroupGetPrevPositionOfTypeMethod = ProcPtr;  { FUNCTION TQ3XGroupGetPrevPositionOfTypeMethod(group: TQ3GroupObject; isType: TQ3ObjectType; VAR gPos: TQ3GroupPosition): TQ3Status; C; }
  260.  
  261.  
  262. CONST
  263.     kQ3XMethodType_GroupCountObjectsOfType = 'gcnt';
  264.  
  265.  
  266. TYPE
  267.     TQ3XGroupCountObjectsOfTypeMethod = ProcPtr;  { FUNCTION TQ3XGroupCountObjectsOfTypeMethod(group: TQ3GroupObject; isType: TQ3ObjectType; VAR nObjects: LONGINT): TQ3Status; C; }
  268.  
  269.  
  270. CONST
  271.     kQ3XMethodType_GroupEmptyObjectsOfType = 'geot';
  272.  
  273.  
  274. TYPE
  275.     TQ3XGroupEmptyObjectsOfTypeMethod = ProcPtr;  { FUNCTION TQ3XGroupEmptyObjectsOfTypeMethod(group: TQ3GroupObject; isType: TQ3ObjectType): TQ3Status; C; }
  276.  
  277.  
  278. CONST
  279.     kQ3XMethodType_GroupGetFirstObjectPosition = 'gfop';
  280.  
  281.  
  282. TYPE
  283.     TQ3XGroupGetFirstObjectPositionMethod = ProcPtr;  { FUNCTION TQ3XGroupGetFirstObjectPositionMethod(group: TQ3GroupObject; object: TQ3Object; VAR gPos: TQ3GroupPosition): TQ3Status; C; }
  284.  
  285.  
  286. CONST
  287.     kQ3XMethodType_GroupGetLastObjectPosition = 'glop';
  288.  
  289.  
  290. TYPE
  291.     TQ3XGroupGetLastObjectPositionMethod = ProcPtr;  { FUNCTION TQ3XGroupGetLastObjectPositionMethod(group: TQ3GroupObject; object: TQ3Object; VAR gPos: TQ3GroupPosition): TQ3Status; C; }
  292.  
  293.  
  294. CONST
  295.     kQ3XMethodType_GroupGetNextObjectPosition = 'gnop';
  296.  
  297.  
  298. TYPE
  299.     TQ3XGroupGetNextObjectPositionMethod = ProcPtr;  { FUNCTION TQ3XGroupGetNextObjectPositionMethod(group: TQ3GroupObject; object: TQ3Object; VAR gPos: TQ3GroupPosition): TQ3Status; C; }
  300.  
  301.  
  302. CONST
  303.     kQ3XMethodType_GroupGetPrevObjectPosition = 'gpop';
  304.  
  305.  
  306. TYPE
  307.     TQ3XGroupGetPrevObjectPositionMethod = ProcPtr;  { FUNCTION TQ3XGroupGetPrevObjectPositionMethod(group: TQ3GroupObject; object: TQ3Object; VAR gPos: TQ3GroupPosition): TQ3Status; C; }
  308.  
  309. {
  310.  *    Group Position Methods
  311.  *    
  312.  }
  313.  
  314. CONST
  315.     kQ3XMethodType_GroupPositionSize = 'ggpz';
  316.  
  317.  
  318. TYPE
  319.     TQ3XMethodTypeGroupPositionSize        = LONGINT;
  320.  
  321. CONST
  322.     kQ3XMethodType_GroupPositionNew = 'ggpn';
  323.  
  324.  
  325. TYPE
  326.     TQ3XGroupPositionNewMethod = ProcPtr;  { FUNCTION TQ3XGroupPositionNewMethod(gPos: UNIV Ptr; object: TQ3Object; initData: UNIV Ptr): TQ3Status; C; }
  327.  
  328.  
  329. CONST
  330.     kQ3XMethodType_GroupPositionCopy = 'ggpc';
  331.  
  332.  
  333. TYPE
  334.     TQ3XGroupPositionCopyMethod = ProcPtr;  { FUNCTION TQ3XGroupPositionCopyMethod(srcGPos: UNIV Ptr; dstGPos: UNIV Ptr): TQ3Status; C; }
  335.  
  336.  
  337. CONST
  338.     kQ3XMethodType_GroupPositionDelete = 'ggpd';
  339.  
  340.  
  341. TYPE
  342.     TQ3XGroupPositionDeleteMethod = ProcPtr;  { PROCEDURE TQ3XGroupPositionDeleteMethod(gPos: UNIV Ptr); C; }
  343.  
  344. {
  345.  *    View Drawing Helpers
  346.  *    
  347.  *    TQ3XGroupStartIterateMethod
  348.  *
  349.  *        Pass back *object = NULL to NOT call EndIterate iterate
  350.  *        Pass back *object != NULL to draw object
  351.  *         (other side will pass it to EndIterate for deletion!)
  352.  *
  353.  *        *iterator is uninitialized, use for iteration state. Caller should 
  354.  *         ignore it.
  355.  *    
  356.  *    TQ3XGroupEndIterateMethod
  357.  *    
  358.  *        *object is previous object, dispose it or play with it.
  359.  *        Pass back NULL when last iteration has occurred
  360.  *        *iterator is previous value, use for iteration state Caller should 
  361.  *        ignore it.
  362.  }
  363.  
  364. CONST
  365.     kQ3XMethodType_GroupStartIterate = 'gstd';
  366.  
  367.  
  368. TYPE
  369.     TQ3XGroupStartIterateMethod = ProcPtr;  { FUNCTION TQ3XGroupStartIterateMethod(group: TQ3GroupObject; VAR iterator: TQ3GroupPosition; VAR object: TQ3Object; view: TQ3ViewObject): TQ3Status; C; }
  370.  
  371.  
  372. CONST
  373.     kQ3XMethodType_GroupEndIterate = 'gitd';
  374.  
  375.  
  376. TYPE
  377.     TQ3XGroupEndIterateMethod = ProcPtr;  { FUNCTION TQ3XGroupEndIterateMethod(group: TQ3GroupObject; VAR iterator: TQ3GroupPosition; VAR object: TQ3Object; view: TQ3ViewObject): TQ3Status; C; }
  378.  
  379. {
  380.  *    IO  Helpers
  381.  *    
  382.  *    TQ3XGroupEndReadMethod
  383.  *        Called when a group has been completely read. Group should perform
  384.  *        validation and clean up any reading caches.
  385.  }
  386.  
  387. CONST
  388.     kQ3XMethodType_GroupEndRead    = 'gerd';
  389.  
  390.  
  391. TYPE
  392.     TQ3XGroupEndReadMethod = ProcPtr;  { FUNCTION TQ3XGroupEndReadMethod(group: TQ3GroupObject): TQ3Status; C; }
  393.  
  394. FUNCTION Q3XGroup_GetPositionPrivate(group: TQ3GroupObject; position: TQ3GroupPosition): Ptr; C;
  395.  
  396.  
  397.  
  398. {$ALIGN RESET}
  399. {$POP}
  400.  
  401. {$SETC UsingIncludes := QD3DGroupIncludes}
  402.  
  403. {$ENDC} {__QD3DGROUP__}
  404.  
  405. {$IFC NOT UsingIncludes}
  406.  END.
  407. {$ENDC}
  408.